package com.heima.wemedia.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.common.dtos.PageResult;
import com.heima.common.dtos.ResponseResult;
import com.heima.model.admin.dtos.NewsAuthRequestDTO;
import com.heima.model.admin.dtos.NewsAuthResponseDTO;
import com.heima.model.media.dtos.WmNewsDto;
import com.heima.model.media.dtos.WmNewsPageReqDto;
import com.heima.model.media.enums.WmNewsStatusEnum;
import com.heima.model.user.dtos.AuthDTO;
import com.heima.wemedia.pojo.WmNews;

/**
 * <p>
 * 自媒体图文内容信息表 服务类
 * </p>
 *
 * @author HM
 * @since 2023-03-22
 */
public interface WmNewsService extends IService<WmNews> {

    /**
     * 根据提供的条件分页查询当前自媒体用户的自媒体文章列表
     *
     * @param dto
     * @return
     */
    PageResult<WmNews> findByPage(WmNewsPageReqDto dto);

    /**
     * 自媒体用户登录后，新增、修改、发布自媒体文章
     *
     * @param dto
     */
    void submit(WmNewsDto dto);

    /**
     * 前台根据文章id查询自媒体文章详情
     *
     * @param id
     * @return
     */
    ResponseResult<WmNews> getByWmNewsId(String id);

    /**
     * 自媒体文章上下架,发送kafka消息通知其他微服务
     *
     * @param dto
     * @return
     */
    void downOrUp(WmNewsDto dto);

    /**
     * 分页查询自媒体文章信息, 仅用于feign调用
     *
     * @param dto
     * @return
     */
    Page<NewsAuthResponseDTO> findByPageWithFeign(NewsAuthRequestDTO dto);

    /**
     * 根据自媒体文章id查询自媒体文章人工审核详情
     *
     * @param id
     * @return
     */
    NewsAuthResponseDTO findNewsAuthResponseDTOByWmNewsId(Integer id);

    /**
     * 自媒体文章审核失败(人工审核)
     *
     * @param dto
     */
    void authFail(AuthDTO dto);

    /**
     * 根据文章的审核结果更新文章信息
     *
     * @param wmNewsId
     * @param reason     审核信息
     * @param statusEnum 审核状态
     * @param articleId
     */
    void updateWmNewsWithAuthResult(Integer wmNewsId, String reason, WmNewsStatusEnum statusEnum, Long articleId);


    /**
     * 人工审核成功 feign调用
     *
     * @param dto
     */
    void authPass(AuthDTO dto);

    /**
     * 根据自媒体id删除自媒体文字信息
     * @param id
     */
    void deleteById(Integer id);
}
